In order to look for errors in software programs (an activity referred to as “debugging”), some software development tools provide the ability to record the sequence of operations that a processor performed while executing a program. This is referred to as tracing the execution of the program, and the information that is captured is referred to as trace data. The trace data may comprise data such as the sequence of addresses executed by the processor, values of various processor registers at each executed instruction, and information in log files written by the traced program. The addresses of executed instructions are later correlated to the actual programs so that the opcodes executed at each instruction may be displayed for the user. In systems using virtual memory addressing, however, different tasks execute from the same set of virtual memory addresses making correlating the actual programs to the addresses of the executed instructions difficult.